package trastienda.dao;

import java.util.ArrayList;
import java.util.Collection;

import javax.persistence.EntityManager;
//import javax.persistence.NoResultException;
import javax.persistence.PersistenceContext;
import javax.persistence.Query;
import org.springframework.stereotype.Repository;
import trastienda.excepcion.DAOExcepcion;

import trastienda.modelo.Producto;


@Repository
public class ProductoDAOImpl implements ProductoDAO{
	@PersistenceContext
	private EntityManager em;

	public void setEm(EntityManager em) {
		this.em = em;
	}

	@SuppressWarnings(value = "unchecked")
	public Collection<Producto> listarTodosProduc() throws DAOExcepcion {
		Collection<Producto> entities = new ArrayList<Producto>();
		try {
			Query q = em.createNamedQuery("Producto.seleccionarTodos");
			entities = q.getResultList();
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
		return entities;
	}
		
	@SuppressWarnings("unchecked")
	public Collection<Producto> buscarPorNombreProduc(String nombre) throws DAOExcepcion {
		Query q = em.createQuery("select p from Producto p where upper(p.nombre) like :nombre ");

		q.setParameter("nombre", "%" + nombre.toUpperCase() + "%");
		return q.getResultList();
	}
	
	public Producto insertarProduc(Producto pro) throws DAOExcepcion {
		try {
			em.persist(pro);
		} catch (Exception e) {
			e.printStackTrace();
			throw new DAOExcepcion(e.getMessage());
		}
		return pro;
	}

	public Producto obtenerPorIdproduc(String idProducto) throws DAOExcepcion {
		try {
			return em.find(Producto.class, idProducto);
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
	}
	
	public void eliminarProduc(String idProducto) throws DAOExcepcion {
		try {
			Producto p = em.find(Producto.class, idProducto);
			em.remove(p);
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
	}

	public Producto actualizarproduc(Producto pro) throws DAOExcepcion {
		try {
			em.merge(pro);
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
		return pro;
	}
	/*
	public Producto validar(String idProducto, String clave)
			throws LoginExcepcion, DAOExcepcion {

		Query query = em
				.createQuery("select u from Usuario u where idUsuario = :idusuario and clave= :clave");
		query.setParameter("idusuario", idUsuario);
		query.setParameter("clave", clave);
		try {
			return (Usuario) query.getSingleResult();
		} catch (NoResultException e) {
			throw new LoginExcepcion("Usuario y/o clave incorrectos.");
		} catch (Exception e) {
			throw new DAOExcepcion(e.getMessage());
		}
	}
*/
}
